import books from "@/mock/book";

export default {
    namespaced: true,
    // 定义你所需要的管理的对象或者属性，可以把这个当作是SPA或者组件的data属性
    state() {
        return {
            // 开始监听管理购物车的书籍
            items: books
        }
    },

    // 定义mutations修改状态state的行为和状态
    mutations: {
        // 对外公开一个方法
        // 参数1：state
        // 参数2: 具体的参数
        putItemCarts(state, book) {
            state.items.push(book);
        },

        delShopCarts(state, index) {
            state.items.splice(index, 1);
        },

        addBookCount(state, index) {
            state.items[index].count++;
        },

        lessBookCount(state, index) {
            if (state.items[index].count <= 0) {
                state.items[index].count == 0;
            } else {
                state.items[index].count--;
            }
        },

        increment(state, cindex) {
            state.items[cindex].count++;
        }
    },

    // getters是一种公共的计算属性，和computed规则一模一样，内部有缓存
    // 在getters定义公共的计算属性
    getters: {
        totalPrice(state) {
            return state.items.reduce((total, item) => {
                return total + item.price * item.count
            }, 0)
        },

        totalCount(state) {
            return state.items.reduce((total, item) => {
                return total + item.count;
            }, 0);
        },
    },

    // 定义异步处理
    actions: {
        addCarts(context, book) {
            var cindex = context.state.items.findIndex(item => item.id == book.id);
            if (cindex != -1) {
                context.commit("increment", cindex);
            } else {
                context.commit("putItemCarts", book);
            }
        }
    }
}